package com.tonann.tonannmqtt.mqtt.mulitipleServer;

import com.tonann.tonannmqtt.conf.WorkProducer;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

/**
 * 常规MQTT回调函数
 */
@Slf4j
public class MqttClientCallback implements MqttCallback {


    //    private static RedisCache redisTemplate = SpringContextHolder.getBean(RedisCache.class);
    private static WorkProducer workProducer = SpringContextHolder.getBean(WorkProducer.class);

    /**
     * 系统的mqtt客户端id
     */
    private String mqttClientId;

    public MqttClientCallback(String mqttClientId) {
        this.mqttClientId = mqttClientId;
    }

    /**
     * MQTT 断开连接会执行此方法
     */
    @Override
    public void connectionLost(Throwable throwable) {
        log.info("断开了MQTT连接 ：{}", throwable.getMessage());
        //log.error(throwable.getMessage(), throwable);
    }


    /**
     * publish发布成功后会执行到这里
     */
    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        log.info("发布消息成功");
    }

    /**
     * subscribe订阅后得到的消息会执行到这里
     */
    @Override
    public void messageArrived(String topic, MqttMessage message) throws Exception {
        //  TODO    此处可以将订阅得到的消息进行业务处理、数据存储
//        System.out.println("收到来自 "+ mqttClientId + "====" + topic + " 的消息："+new String(message.getPayload()) );
//        MQTTMsg.getInstance().map.put("mqtt::" + mqttClientId + "::" + UUID.randomUUID().toString(),new String(message.getPayload()) );
//        redisTemplate.setCacheObject("mqtt:" + mqttClientId + ":" + UUID.randomUUID().toString(), new String(message.getPayload()));
//        log.info("收到来自 "+ mqttClientId + "====" + topic + " 的消息：{}", new String(message.getPayload()));
        workProducer.sendMessage(new String(message.getPayload()));
//        if("TEST".equals(topic)){
//            //发送到rabbit消息队列
//            rabbitTemplate.convertAndSend("environmentDirectExchange", "environmentNilometer", message.getPayload());
//        }else {
//            log.info("测试主题进入" + topic +"主题判断方法=================");
//            //发送到rabbit消息队列
//            rabbitTemplate.convertAndSend("environmentDirectExchange", "environmentMeteor", message.getPayload());
//        }
    }
}